"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/12 13:33
@Description : python 高阶知识
计算多个数据的连续加和
"""
"""
def sum_data(*args):
    sum_total = 0
    for i in args:
        sum_total += i
    return sum_total

sum_result=sum_data(1,2,3,4,5)
# 访问在函数内部定义的变量  局部变量
# print(sum_total)  # name 'sum_total' is not defined
print(sum_result)

sum_result2 = sum_data(1, 2, 3, 4, 5)
print(sum_result2)

"""
# 定义全局变量
"""
sum_total = 0
def sum_data(*args):
    # 函数内部访问全局变量 sum_total
    # print(sum_total)
    # 函数内部该表全局变量时  需要声明为global sum_total
    global sum_total
    for i in args:
        sum_total += i


sum_data(1, 2, 3, 4, 5)
print(sum_total)
# 改变sum_total的值
sum_total = -10
sum_data(1, 2, 3, 4, 5)
print(sum_total)


"""

"""
 通过定义全局的变量, 实现了数据的连续求和 但是这种做法存在数据安全性问题  sum_total值可以随时改变
 解决：python中可以使用闭包   函数中套函数,内部函数访问外部函数定义的变量 ,外部函数将内部函数作为返回值返回
"""

# 闭包
"""
def fn_parent():
    # 局部变量
    str = "hello python"
    num = 0

    # 内部函数
    def inner_fn():
        print(str, len(str))
        # 改变外部函数中定义的变量时  需要声明
        nonlocal num
        num += 1

    return inner_fn  # 将函数作为fn_parent函数的返回值返回


# 调用函数
fn = fn_parent()
print(type(fn))
# 调用返回值返回的函数
fn()
"""
def sum_total():
    sum_total = 0

    def sum_data(*args):
        nonlocal sum_total
        for i in args:
            sum_total += i
        return sum_total
    return sum_data

# 调用函数
fn = sum_total()
result = fn(1, 2, 3, 4, 5)
print(result)
result = fn(1, 2, 3, 4, 5)
print(result)
result = fn(1, 2, 3, 4, 5)
print(result)

"""
   银行账户    total_money  =1000
   取钱
   存钱
"""


def bank():
    # 账户余额
    total_money = 1000

    # 取钱
    def withdrawMoney(num):
        nonlocal total_money
        total_money = total_money - num
        return total_money
    # def depositMoney(num):
    #     nonlocal total_money
    #     total_money = total_money + num
    #     return total_money
    return withdrawMoney


out_withdrawMoney, out_depositMoney = bank()
print(out_withdrawMoney(100))
print(out_withdrawMoney(100))
print(out_depositMoney(100))
print(out_depositMoney(100))
